package 正则表达式.书写规范;

public class Test {
    public static void main(String[] args) {
        // 1. 字符类
        System.out.println("a".matches("[abc]"));   //[abc]只能匹配a, b, c
        System.out.println("e".matches("[abcd]"));  //false

        System.out.println("d".matches("[^abc]"));   //[^abc] 不能是abc
        System.out.println("a".matches("[^abc]"));     //false

        System.out.println("b".matches("[a-zA-Z]"));   //[a-zA-Z] 只能是a-z,A-Z的字符
        System.out.println("2".matches("[a-zA-Z]"));     //false

        System.out.println("k".matches("[a-z&&[^bc]]"));   //a到z,除了b和c
        System.out.println("b".matches("[a-z&&[^bc]]"));   //false

        System.out.println("ab".matches("[a-zA-Z0-9]"));  //false  注意: 以上带[内容]的规则都只能用于匹配单个字符

        // 2. 预定义字符(只能匹配单个字符)   .   \d   \D    \s     \S    \w    \W
        System.out.println("徐".matches("."));  // "." 可以匹配任意字符
        System.out.println("徐徐".matches("."));   //false

        System.out.println("3".matches("\\d"));  //  \d: 0-9
        System.out.println("a".matches("\\d"));  //false

        System.out.println(" ".matches("\\s"));    //  \s:  代表一个空白字符
        System.out.println("a".matches("\\s"));    // false

        System.out.println("a".matches("\\S"));    //  \S: 代表一个非空白字符
        System.out.println(" ".matches("\\S"));    // false

        System.out.println("a".matches("\\w"));   // \w: [a-zA-Z_0-9]
        System.out.println("_".matches("\\w"));   // true
        System.out.println("徐".matches("\\w"));  // false

        System.out.println("徐".matches("\\W"));   // [^\w]不能是a-zA-Z_0-9
        System.out.println("a".matches("\\W"));   //false

        System.out.println("23456".matches("\\d"));   //false 注意": 以上预定义字符都只能匹配单个字符

        // 3. 数量词: ? * + {n}  {n, } {n, m}
        System.out.println("a".matches("\\w?")); // ? 代表0次或1次
        System.out.println("".matches("\\w?"));
        System.out.println("abc".matches("\\w?"));

        System.out.println("abc12".matches("\\w*"));  // * 代表0次或多次
        System.out.println("".matches("\\w*"));
        System.out.println("abc12张".matches("\\w*"));

        System.out.println("abc12".matches("\\w+"));   // + 代表1次或多次
        System.out.println("".matches("\\w+"));
        System.out.println("abc12张".matches("\\w+"));

        System.out.println("a3c".matches("\\w{3}"));  // {3} 代表正好是n次
        System.out.println("abcd".matches("\\w{3}"));
        System.out.println("abcd".matches("\\w{3,}"));  // {3,}代表是>=3次
        System.out.println("abc232d".matches("\\w{3,9}"));  // {3,9}代表是 大于等于3次,小于等于9次

    }
}
